<?php
class OnlineTime {
   function OnlineTime() { 

      $this -> userID  = $_COOKIE["OnlineTime_ID"]; // user's ID 
      $this -> userTT  = $_COOKIE["OnlineTime_TT"]; // user's total time on site 
      $this -> userST  = $_COOKIE["OnlineTime_ST"]; // time when user entered the site 
      $this -> userTO  = $_COOKIE["OnlineTime_TO"]; // time that the user has been online this sesion 
      $this -> displayID = 0; // ID used to generate diferent script in case of multiple call of display() function 

      if ($this -> userID != "") { 

         if ($this -> userST == "") { 

            $this -> userST = time(); 
            setcookie("OnlineTime_ST", $this -> userST); 
         } 

         $this -> userLPT = time() - $this -> userST - $this -> userTO; 

         $this -> userTT += $this -> userLPT; 
         setcookie("OnlineTime_TT", $this -> userTT, time()+60*60*60*60*60); 

         $this -> userTO = time() - $this -> userST; 
         setcookie("OnlineTime_TO", $this -> userTO); 

         $this -> userTO = OnlineTime::normalizare($this -> userTO); 
         $this -> userTT = OnlineTime::normalizare($this -> userTT); 
      } 

      if ($this -> userID == "") { 

         OnlineTime::newID(); 
      } 

   } 

   function newID() { 

         $this -> userID = md5(rand()); 
         $this -> userST = time(); 
         $this -> userTO = 0; 
         $this -> userTT = 0; 
         setcookie("OnlineTime_ID", $this -> userID, time()+(60*60*24*365*10)); 
         setcookie("OnlineTime_ST", $this -> userST); 
         setcookie("OnlineTime_TO", $this -> userTO); 
         setcookie("OnlineTime_TT", $this -> userTT, time()+(60*60*24*365*10)); 
   } 

   function normalizare($secunde) { 

         $minute  = $secunde / 60; 
         $secunde = $secunde % 60; 
         $ore     = $minute  / 60; 
         $minute  = $minute  % 60; 
      $zile    = $ore     / 24; 
         $ore     = $ore     % 24; 

         return $timp = array("days" => (int)$zile, "hours" => $ore, "minutes" => $minute, "seconds" => $secunde); 
   } 

   function display_time($type){ 

      $this -> displayID++; 

      if ($type == "current_page") { 

         $time_start_multiply = 0; 
      } 

      if ($type == "current_session") { 

         $time_start_multiply = $this -> userTO["days"]*24*60*60 + $this -> userTO["hours"]*60*60 + $this -> userTO["minutes"]*60 + $this -> userTO["seconds"]; 
      } 

      if ($type == "total_time") { 

         $time_start_multiply = $this -> userTT["days"]*24*60*60 + $this -> userTT["hours"]*60*60 + $this -> userTT["minutes"]*60 + $this -> userTT["seconds"]; 
      } 

      echo " 
               <script type=\"text/javascript\"> 
               document.writeln(\"<span id=\\\"OnlineTime" . $this -> displayID . "\\\"></span>\"); 

               zi_inceput" . $this -> displayID . " = new Date(); 
               ceas_start" . $this -> displayID . " = zi_inceput" . $this -> displayID . ".getTime(); 

               function initStopwatch" . $this -> displayID . "() { 

               var timp_pe_pag" . $this -> displayID . " = new Date(); 
                  return((timp_pe_pag" . $this -> displayID . ".getTime()+(1000*$time_start_multiply) - ceas_start" . $this -> displayID . ")/1000); 
               } 
               function getSecs" . $this -> displayID . "() { 


                  var tSecs" . $this -> displayID . " = Math.round(initStopwatch" . $this -> displayID . "()); 
                  var iSecs" . $this -> displayID . " = tSecs" . $this -> displayID . " % 60; 
                  var iMins" . $this -> displayID . " = Math.round((tSecs" . $this -> displayID . "-30)/60); 
                  var iHour" . $this -> displayID . " = Math.round((iMins" . $this -> displayID . "-30)/60); 
                  var iMins" . $this -> displayID . " = iMins" . $this -> displayID . " % 60; 
                  var iDays" . $this -> displayID . " = Math.round((iHour" . $this -> displayID . "-11)/24); 
               if (iDays" . $this -> displayID . " == -0) {iDays" . $this -> displayID . " *= (-1)}; // Stupid Opera :) 
                  var iHour" . $this -> displayID . " = iHour" . $this -> displayID . " % 24; 
                  var sSecs" . $this -> displayID . " = \"\" + ((iSecs" . $this -> displayID . " > 9) ? iSecs" . $this -> displayID . " : \"0\" + iSecs" . $this -> displayID . "); 
                  var sMins" . $this -> displayID . " = \"\" + ((iMins" . $this -> displayID . " > 9) ? iMins" . $this -> displayID . " : \"0\" + iMins" . $this -> displayID . "); 
                  var sHour" . $this -> displayID . " = \"\" + ((iHour" . $this -> displayID . " > 9) ? iHour" . $this -> displayID . " : \"0\" + iHour" . $this -> displayID . "); 

               document.getElementById('OnlineTime" . $this -> displayID . "').innerHTML=iDays" . $this -> displayID . "+\":\"+sHour" . $this -> displayID . "+\":\"+sMins" . $this -> displayID . "+\":\"+sSecs" . $this -> displayID . "; 
               window.setTimeout('getSecs" . $this -> displayID . "()',1000); 

               } 
               window.setTimeout('getSecs" . $this -> displayID . "()',1000) 

               </script> 
      "; 


   } 
} 

?>
